package domain;

import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.JOptionPane;

import ui.controller.TicTacToeControllerChar;
import database.DatabaseFile;
import database.DatabaseOnline;
import database.iDatabase;
import domain.exceptions.KomtInOrdeException;
import domain.model.TicTacToeGame;
import domain.model.iGame;

public class SpelSetup {
	private boolean eigenTeken;
	private iDatabase gegevensBank;
	
	
	public SpelSetup(){
		setGameType();
	}
	
	private void setGameType() {
		String SpelerType = JOptionPane.showInputDialog("Welke spel type wilt u spelen?\n\n1. Lokale game\n2. Netwerkgame\n0. Exit ");
		try{
			if (Integer.parseInt(SpelerType) == 1){
				setEigenTekens();
				setGameTekensType();
			}else if (Integer.parseInt(SpelerType) == 2){
				buildGameNetwork();	
			}else if (Integer.parseInt(SpelerType) == 0){
				System.exit(0);
			}else{
				setGameType();
			}
		} catch (NumberFormatException e){
			setGameType();
		}
	}


	private void buildGameNetwork() {
		gegevensBank = new DatabaseOnline();
		//todo
		
	}
	
	
	private void setEigenTekens() {
		String SpelerType = JOptionPane.showInputDialog("Wilt u met zelfgekozen tekens spelen?\n\n1. Ja\n2. Nee");
		try{
			if (Integer.parseInt(SpelerType) == 1){
				eigenTeken = true;
			}
			else if (Integer.parseInt(SpelerType) == 2){
				eigenTeken = false;
			}
			else{
				setEigenTekens();
			}
		} catch (NumberFormatException e){
			setEigenTekens();
		}
	}

	private void setGameTekensType() {
		String TekenType = JOptionPane.showInputDialog("Met wel soort tekens wilt u spelen?\n\n1. Letters\n2. Afbeelingen");
		try{
			if (Integer.parseInt(TekenType) == 1){
				buildGameLokaal(Integer.parseInt(TekenType));
			}
			else if (Integer.parseInt(TekenType) == 2){
				buildGameLokaal(Integer.parseInt(TekenType));	
			}
			else{
				setGameTekensType();
			}
		} catch (NumberFormatException e){
			setGameTekensType();
		}
	}
	
	
	private void buildGameLokaal(int type) {
		iGame ticTacToeGame = new TicTacToeGame();
		Switcher switcher = new Switcher();
		TicTacToeControllerChar tictactoe1;
		TicTacToeControllerChar tictactoe2;
		try {
			gegevensBank = new DatabaseFile();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (KomtInOrdeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		if (type == 1){
			tictactoe1 = new TicTacToeControllerChar(ticTacToeGame,
					new Speler(new SpelerTekenChar(eigenTeken)), 0, gegevensBank);
			tictactoe2 = new TicTacToeControllerChar(ticTacToeGame,
					new Speler(new SpelerTekenChar(eigenTeken)), 1, gegevensBank);
		}else{
			tictactoe1 = new TicTacToeControllerChar(ticTacToeGame,
					new Speler(new SpelerTekenAfbeelding(eigenTeken)), 0, gegevensBank);
			tictactoe2 = new TicTacToeControllerChar(ticTacToeGame,
					new Speler(new SpelerTekenAfbeelding(eigenTeken)), 1, gegevensBank);
		}
		
		tictactoe1.updateValues(tictactoe2);
		tictactoe2.updateValues(tictactoe1);

		tictactoe2.enable(false);

		switcher.addController(tictactoe1);
		switcher.addController(tictactoe2);
		ticTacToeGame.registerObserver(switcher);
	}
}
